﻿using System;
using Iot.Shared.Enums;

namespace Iot.Shared.Helper;

/// <summary>
///     提供将数据转换为特定类型的扩展方法
/// </summary>
public static class ToBusDataType
{
    /// <summary>
    ///     将对象转换为枚举类型
    /// </summary>
    /// <param name="data">要转换的对象</param>
    /// <returns>如果对象是枚举类型则返回该枚举值，否则返回null</returns>
    public static Enum? ToEnum(this object? data)
    {
        return data as Enum;
    }

    /// <summary>
    ///     将对象转换为Switching类型
    /// </summary>
    /// <param name="data">要转换的对象</param>
    /// <returns>如果对象是Switching类型则返回该值，否则返回null</returns>
    public static Switching? ToSwitching(this object? data)
    {
        return data is Switching value ? value : null;
    }

    /// <summary>
    ///     将对象转换为双精度浮点数类型
    /// </summary>
    /// <param name="data">要转换的对象</param>
    /// <returns>如果对象是双精度浮点数类型则返回该值，否则返回null</returns>
    public static double? ToFloat(this object? data)
    {
        return data is double value ? value : null;
    }

    /// <summary>
    ///     将对象转换为长整型类型
    /// </summary>
    /// <param name="data">要转换的对象</param>
    /// <returns>如果对象为长整型类型则返回该值，否则返回null</returns>
    public static long? ToInteger(this object? data)
    {
        return data is long value ? value : null;
    }
}